package com.dh.jarvis.Util;

import com.alibaba.fastjson.JSON;

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.List;
import java.util.Map;

/**
 * JSON转换工具类 使用前调用getInstance方法
 *
 * @author M.c
 * @date 2014-11-13
 * @toJson 将对象转换成json字符串
 * @getValue 在json字符串中，根据key值找到value
 * @json2Map 将json格式转换成map对象
 * @json2Bean 将json转换成bean对象
 * @json2List 将json格式转换成List对象
 * @Obj2Map obj 转为 map
 */
public class jsonUtil {

//    private Gson gson;
    private static final int JSON_INDENT = 4;
//
//
//    private jsonUtil() {
//        gson = new Gson();
//    }
//
//    private static class gsonUtilHolder {
//        private static jsonUtil instance = new jsonUtil();
//    }
//
//    /**
//     * 使用方法前调用getInstance,获得gsonUtil实例
//     *
//     * @return
//     */
//    public static jsonUtil getInstance() {
//        return gsonUtilHolder.instance;
//    }

    /**
     * 将对象转换成json字符串
     *
     * @param obj
     * @return
     */
    public static String toJson(Object obj) {
        if (obj == null) {
            return "{}";
        }
//        return gson.toJson(obj);
        return JSON.toJSONString(obj);
    }

    /**
     * 在json字符串中，根据key值找到value
     *
     * @param json
     * @param key
     * @return
     */
    public static Object getValue(String json, String key) {
        Object rulsObj = null;
        Map<?, ?> rulsMap = json2Map(json);
        if (rulsMap != null && rulsMap.size() > 0) {
            rulsObj = rulsMap.get(key);
        }
        return rulsObj;
    }

    /**
     * 将json格式转换成map对象
     *
     * @param json
     * @return
     */
    public static Map<String, Object> json2Map(String json) {
        Map<String, Object> objMap = null;
//        if (gson != null) {
//            Type type = new TypeToken<Map<String, Object>>() {
//            }.getType();
//            objMap = gson.fromJson(json, type);
//        }
        objMap = (Map<String, Object>) JSON.parse(json);
        if (objMap == null) {
            return null;
        }
        return objMap;
    }

    /**
     * 将json转换成bean对象
     *
     * @param <T>
     * @param json
     * @param clazz
     * @return
     */
    public static <T> T json2Bean(String json, Class<T> clazz) {
        T obj = null;
//        if (gson != null) {
//            obj = gson.fromJson(json, clazz);
//        }
        obj =  JSON.parseObject(json,clazz);
        return obj;
    }

    /**
     * 将json格式转换成List对象
     *
     * @param json
     * @return
     */
    public static <T> List<T> json2List(String json, Class<T> clazz) {
//        if (gson != null) {
//            return gson.fromJson(json, type);
//        }
        return JSON.parseArray(json,clazz);
    }


    /**
     * obj 转为 map
     *
     * @param obj 需要转的对象
     * @return
     */
    public Map<String, Object> Obj2Map(Object obj) {
        if (obj != null) {
            return json2Map(toJson(obj));
        }
        return null;
    }

    /**
     * 返回解析后的json格式字符串
     *
     * @param json
     * @return
     */
    public static String format(String json) {
        String formattedString = null;
        if (StringUtil.isBlank(json)) {
            LogUtil.e("json is empty");
            return "";
        }
        try {
            if (json.startsWith("{")) {
                JSONObject jsonObject = new JSONObject(json);
                formattedString = jsonObject.toString(JSON_INDENT);
            } else if (json.startsWith("[")) {
                JSONArray jsonArray = new JSONArray(json);
                formattedString = jsonArray.toString(JSON_INDENT);
            } else {
                LogUtil.e("json格式不正确");
            }

        } catch (Exception e) {
            e.printStackTrace();
            LogUtil.e("json格式不正确");
        }
        return formattedString;
    }

}
